<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // async function fn(){
    //     // return 1;
    //     throw 0;
    // }

    // var p = fn(); 

    // p.then(data=>{
    //     console.log("fulfilled",data);
    // }).catch(data=>{
    //     console.log("rejected",0);

    // })

    var p = new Promise(function(resolve,reject){
        setTimeout(()=>{
            resolve(1);
        },1000)
    })


    // then方法中回调函数的返回值是普通数据(非Promise实例), 数据直接向后传递  => 成功就走then 失败走catch
    // p.then(function(v){
    //     console.log("fulfilled",v);
    //     // aaa;
    //     return 2;
    // }).then(function(v){
    //     console.log("fulfilled",v);
    //     return 3;
    // }).then(function(v){
    //     console.log("fulfilled",v);
        
    // }).catch(err=>{
    //     console.log("rejected",err);
    // })

    // then方法中回调函数的的返回值时一个Promise实例(处理异步操作)  => 需要等该Promise实例状态改变之后,在向后传递,成功就走then 失败走catch

    p.then(function(v){
        console.log("fulfilled",v); // 1
        
        var p1 = new Promise(function(resolve,reject){
            setTimeout(()=>{
                reject(2);
            },1000)
        })

        return p1;  //    then方法中回调函数的的返回值时一个Promise实例  => 默认pending => 1s后变为fulfilled,存储数据2
    }).then(function(v){
        console.log("fulfilled",v);
        var p2 = new Promise(function(resolve,reject){
            setTimeout(()=>{
                reject(2);
            },1000)
        })
        return p2;
    }).then(function(v){
        console.log("fulfilled",v);
        
    }).catch(err=>{
        console.log("rejected",err);
    })


</script>
</html>